<?php
$path_root_GeracaoContratoClass = dirname(__FILE__);
$DS = DIRECTORY_SEPARATOR;
$path_root_GeracaoContratoClass = "{$path_root_GeracaoContratoClass}{$DS}..{$DS}..{$DS}";
require_once "{$path_root_GeracaoContratoClass}admin{$DS}class{$DS}default.class.php";
class geracaoContrato extends DefaultClass{
	protected $dbConn;

	public function __construct() {
		$this->dbConn = new DataBaseClass();
	}
	public function getSql(){
		$sql = array();
		$sql[] = "
			SELECT	c.*
					,n.nominal_cnpj
					,n.nominal_ie
					,n.nominal_razao_social
					,n.nominal_responsavel
					,n.nominal_responsavel_doc
					,n.nominal_responsavel_cargo
					,n.nominal_tel
					,n.nominal_fax
					,n.nominal_cep
					,n.nominal_logradouro
					,n.nominal_numero
					,n.nominal_complemento
					,n.nominal_bairro
					,n.nominal_cidade
					,n.nominal_uf
					,ind.indice_financeiro_titulo
					,te.tipo_entrega_titulo
					,u.usuario_nome
			FROM	tb_contrato c
			JOIN	tb_nominal n
			ON		n.nominal_id = c.nominal_id
			
			JOIN	tb_indice_financeiro ind
			ON		ind.indice_financeiro_id = c.indice_financeiro_id
			
			JOIN	tb_tipo_entrega te
			ON		te.tipo_entrega_id = c.tipo_entrega_id
			
			JOIN	vw_usuario u
			ON		u.usuario_id = c.usuario_id
			WHERE	1 = 1
		";
		return implode("\n",$sql);
	}
	public function getLista(){
		$sql = array();
		$sql[] = $this->getSql();
		$aSession = $this->getSessions();
		if($aSession['usuario_nivel_id'] > 1){
			$sql[] = "AND c.usuario_id = '{$aSession['usuario_id']}'";
		}
		if(isset($this->values['usuario_id'])&&trim($this->values['usuario_id'])!=''){
			$sql[] = "AND c.usuario_id = '{$this->values['usuario_id']}'";
		}
		if(isset($this->values['usuario_nome'])&&trim($this->values['usuario_nome'])!=''){
			$sql[] = "AND u.usuario_nome LIKE '%{$this->values['usuario_nome']}%'";
		}
		if(isset($this->values['nominal_cnpj'])&&trim($this->values['nominal_cnpj'])!=''){
			$this->values['nominal_cnpj'] = $this->limpaDoc($this->values['nominal_cnpj']);
			$sql[] = "AND n.nominal_cnpj LIKE '%{$this->values['nominal_cnpj']}%'";
		}
		if(isset($this->values['nominal_razao_social'])&&trim($this->values['nominal_razao_social'])!=''){
			$sql[] = "AND n.nominal_razao_social LIKE '%{$this->values['nominal_razao_social']}%'";
		}
		if(isset($this->values['contrato_cod'])&&trim($this->values['contrato_cod'])!=''){
			$sql[] = "AND c.contrato_cod LIKE '%{$this->values['contrato_cod']}%'";
		}
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				while($rs = $this->dbConn->db_fetch_assoc($result['result'])){
					array_push($arr,$rs);
				}
			}
		}
		return $this->utf8_array_encode($arr);
	}
	protected function getItems($contrato_id){
		$sql = array();
		$sql[] = "
			SELECT	*
			FROM	tb_contrato_item
			WHERE	contrato_id = '{$contrato_id}'
			ORDER BY contrato_item_seq ASC
		";
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				while($rs = $this->dbConn->db_fetch_assoc($result['result'])){
					$rs['contrato_item_valor'] = number_format($rs['contrato_item_valor'], 2, ",", ".");
					array_push($arr,$rs);
				}
			}
		}
		return $this->utf8_array_encode($arr);
	}
	protected function getAnexos($contrato_id){
		$sql = array();
		$sql[] = "
			SELECT	ca.*
					,cta.contrato_tipo_anexo_titulo
			FROM	tb_contrato_anexo ca
			JOIN	tb_contrato_tipo_anexo cta
			ON		cta.contrato_tipo_anexo_id = ca.contrato_tipo_anexo_id
			WHERE	contrato_id = '{$contrato_id}'
		";
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				while($rs = $this->dbConn->db_fetch_assoc($result['result'])){
					$arr[$rs['contrato_tipo_anexo_id']] = $rs['contrato_tipo_anexo_titulo'];
				}
			}
		}
		return $this->utf8_array_encode($arr);
	}
	public function getOne(){
		$aSession = $this->getSessions();
		$sql = array();
		$sql[] = $this->getSql();
		$sql[] = "AND c.contrato_id = '{$this->values['contrato_id']}'";
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				$rs = $this->dbConn->db_fetch_assoc($result['result']);
				$rs['contrato_itens'] = $this->getItems($rs['contrato_id']);
				$rs['contrato_aluguel_mensal'] = number_format($rs['contrato_aluguel_mensal'], 2, ",", ".");
				$rs['contrato_valor_ativacao'] = number_format($rs['contrato_valor_ativacao'], 2, ",", ".");
				$rs['contrato_anexos'] = $this->getAnexos($rs['contrato_id']);
				$arr = $rs;
			}
		}
		return $this->utf8_array_encode($arr);
	}
	public function getUsuario(){
		$sql = array();
		$sql[] = "
			SELECT	u.*
					,un.usuario_nivel_titulo
					,s.usuario_status_titulo
					,n.nominal_razao_social
					,n.nominal_email
			FROM	vw_usuario u
			JOIN	tb_usuario_nivel un
			ON		un.usuario_nivel_id = u.usuario_nivel_id
			JOIN	tb_usuario_status s
			ON		s.usuario_status_id = u.usuario_status_id
			JOIN	tb_nominal n
			ON		n.nominal_id = u.nominal_id
			WHERE	1 = 1
		";
		$aSession = $this->getSessions();
		if($aSession['usuario_nivel_id'] > 1){
			$sql[] = "AND u.usuario_id = '{$aSession['usuario_id']}'";
		}
		$sql[] = "ORDER BY u.usuario_nome ASC";
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				while($rs = $this->dbConn->db_fetch_assoc($result['result'])){
					array_push($arr,$rs);
				}
			}
		}
		return $this->utf8_array_encode($arr);
	}
	public function getNominalByCnpj($nominal_cnpj){
		$nominal_cnpj = $this->limpaDoc($nominal_cnpj);
		$sql = array();
		$sql[] = "
			SELECT	n.*
			FROM	tb_nominal n
			JOIN	tb_nominal_atribuicao na
			ON		na.nominal_id = n.nominal_id
			AND		na.nominal_tipo_id = 1
			WHERE	1 = 1
			AND		nominal_cnpj = '{$nominal_cnpj}'
		";
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				$rs = $this->dbConn->db_fetch_assoc($result['result']);
				$arr = $rs;
			}
		}
		return $this->utf8_array_encode($arr);
	}
	public function getIndiceFinanceiro(){
		$sql = array();
		$sql[] = "
			SELECT	*
			FROM	tb_indice_financeiro
			WHERE	1 = 1
		";
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				while($rs = $this->dbConn->db_fetch_assoc($result['result'])){
					array_push($arr,$rs);
				}
			}
		}
		return $this->utf8_array_encode($arr);
	}
	public function getTipoEntrega(){
		$sql = array();
		$sql[] = "
			SELECT	*
			FROM	tb_tipo_entrega
			WHERE	1 = 1
		";
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				while($rs = $this->dbConn->db_fetch_assoc($result['result'])){
					array_push($arr,$rs);
				}
			}
		}
		return $this->utf8_array_encode($arr);
	}
	public function getContratoTipoAnexo(){
		$sql = array();
		$sql[] = "
			SELECT	*
			FROM	tb_contrato_tipo_anexo
			WHERE	1 = 1
		";
		$arr = array();
		$result = $this->dbConn->db_query(implode("\n",$sql));
		if($result['success']){
			if($result['total'] > 0){
				while($rs = $this->dbConn->db_fetch_assoc($result['result'])){
					array_push($arr,$rs);
				}
			}
		}
		return $this->utf8_array_encode($arr);
	}
	
	private function updateNominal(){
		$this->values['nominal_cnpj'] = $this->limpaDoc($this->values['nominal_cnpj']);
		$this->values['nominal_ie'] = $this->limpaDoc($this->values['nominal_ie']);
		$this->values['nominal_responsavel_doc'] = $this->limpaDoc($this->values['nominal_responsavel_doc']);
		$this->values['nominal_tel'] = $this->limpaTel($this->values['nominal_tel']);
		$this->values['nominal_fax'] = $this->limpaTel($this->values['nominal_fax']);
		$this->values['nominal_cep'] = $this->limpaDoc($this->values['nominal_cep']);
		$sql = array();
		$sql[] = "
			UPDATE	tb_nominal SET
				nominal_cnpj = '{$this->values['nominal_cnpj']}'
				,nominal_ie = '{$this->values['nominal_ie']}'
				,nominal_razao_social = '{$this->values['nominal_razao_social']}'
				,nominal_responsavel = '{$this->values['nominal_responsavel']}'
				,nominal_responsavel_doc = '{$this->values['nominal_responsavel_doc']}'
				,nominal_responsavel_cargo = '{$this->values['nominal_responsavel_cargo']}'
				,nominal_tel = '{$this->values['nominal_tel']}'
				,nominal_fax = '{$this->values['nominal_fax']}'
				,nominal_cep = '{$this->values['nominal_cep']}'
				,nominal_logradouro = '{$this->values['nominal_logradouro']}'
				,nominal_numero = '{$this->values['nominal_numero']}'
				,nominal_complemento = '{$this->values['nominal_complemento']}'
				,nominal_bairro = '{$this->values['nominal_bairro']}'
				,nominal_cidade = '{$this->values['nominal_cidade']}'
				,nominal_uf = '{$this->values['nominal_uf']}'
			WHERE	nominal_id = '{$this->values['nominal_id']}'	
		";
		return $this->dbConn->db_execute(implode("\n",$sql));
	}
	private function insertNominal(){
		$this->values['nominal_cnpj'] = $this->limpaDoc($this->values['nominal_cnpj']);
		$this->values['nominal_ie'] = $this->limpaDoc($this->values['nominal_ie']);
		$this->values['nominal_responsavel_doc'] = $this->limpaDoc($this->values['nominal_responsavel_doc']);
		$this->values['nominal_tel'] = $this->limpaTel($this->values['nominal_tel']);
		$this->values['nominal_fax'] = $this->limpaTel($this->values['nominal_fax']);
		$this->values['nominal_cep'] = $this->limpaCep($this->values['nominal_cep']);
		$sql = array();
		$sql[] = "
			INSERT INTO	tb_nominal SET
					nominal_cnpj = '{$this->values['nominal_cnpj']}'
					,nominal_ie = '{$this->values['nominal_ie']}'
					,nominal_razao_social = '{$this->values['nominal_razao_social']}'
					,nominal_responsavel = '{$this->values['nominal_responsavel']}'
					,nominal_responsavel_doc = '{$this->values['nominal_responsavel_doc']}'
					,nominal_responsavel_cargo = '{$this->values['nominal_responsavel_cargo']}'
					,nominal_tel = '{$this->values['nominal_tel']}'
					,nominal_fax = '{$this->values['nominal_fax']}'
					,nominal_cep = '{$this->values['nominal_cep']}'
					,nominal_logradouro = '{$this->values['nominal_logradouro']}'
					,nominal_numero = '{$this->values['nominal_numero']}'
					,nominal_complemento = '{$this->values['nominal_complemento']}'
					,nominal_bairro = '{$this->values['nominal_bairro']}'
					,nominal_cidade = '{$this->values['nominal_cidade']}'
					,nominal_uf = '{$this->values['nominal_uf']}'
		";
		$result = $this->dbConn->db_execute(implode("\n",$sql));
		if($result['success']===false){
			return $result;
		}
		$this->values['nominal_id'] = $result['last_id'];
		$sql = array();
		$sql[] = "
			INSERT INTO	tb_nominal_atribuicao SET
					nominal_id = '{$result['last_id']}'
					,nominal_tipo_id = 1
					,nominal_atribuicao_dt = curdate()
					,nominal_atribuicao_hr = curtime()
		";
		return $this->dbConn->db_execute(implode("\n",$sql));

	}
	protected function deleteAnexo(){
		$sql = array();
		$sql[] = "DELETE FROM tb_contrato_anexo WHERE contrato_id = '{$this->values['contrato_id']}'";
		return $this->dbConn->db_execute(implode("\n",$sql));
	}
	protected function deleteItem(){
		$sql = array();
		$sql[] = "DELETE FROM tb_contrato_item WHERE contrato_id = '{$this->values['contrato_id']}'";
		return $this->dbConn->db_execute(implode("\n",$sql));
	}
	protected function insertContrato(){
		$aSession = $this->getSessions();
		$this->values['usuario_id'] = $aSession['usuario_id'];
		$this->values['contrato_aluguel_mensal'] = $this->limpaMoeda($this->values['contrato_aluguel_mensal']);
		$this->values['contrato_valor_ativacao'] = $this->limpaMoeda($this->values['contrato_valor_ativacao']);
		$sql = array();
		$sql[] = "
			INSERT INTO	tb_contrato SET
					usuario_id = '{$this->values['usuario_id']}'
					,nominal_id = '{$this->values['nominal_id']}'
					,contrato_cod = '{$this->values['contrato_cod']}'
					,contrato_prazo_locacao = '{$this->values['contrato_prazo_locacao']}'
					,contrato_aluguel_mensal = '{$this->values['contrato_aluguel_mensal']}'
					,indice_financeiro_id = '{$this->values['indice_financeiro_id']}'
					,contrato_mes_ref = '{$this->values['contrato_mes_ref']}'
					,contrato_ano_ref = '{$this->values['contrato_ano_ref']}'
					,tipo_entrega_id = '{$this->values['tipo_entrega_id']}'
					,contrato_valor_ativacao = '{$this->values['contrato_valor_ativacao']}'
					,contrato_forma_pgto = '{$this->values['contrato_forma_pgto']}'
		";
		$result = $this->dbConn->db_execute(implode("\n",$sql));
		if($result['success']){
			$this->values['contrato_id'] = $result['last_id'];
		}
		return $result;
	}
	protected function updateContrato(){
		$this->values['contrato_aluguel_mensal'] = $this->limpaMoeda($this->values['contrato_aluguel_mensal']);
		$this->values['contrato_valor_ativacao'] = $this->limpaMoeda($this->values['contrato_valor_ativacao']);
		$sql = array();
		$sql[] = "
			UPDATE	tb_contrato SET
					usuario_id = '{$this->values['usuario_id']}'
					,nominal_id = '{$this->values['nominal_id']}'
					,contrato_cod = '{$this->values['contrato_cod']}'
					,contrato_prazo_locacao = '{$this->values['contrato_prazo_locacao']}'
					,contrato_aluguel_mensal = '{$this->values['contrato_aluguel_mensal']}'
					,indice_financeiro_id = '{$this->values['indice_financeiro_id']}'
					,contrato_mes_ref = '{$this->values['contrato_mes_ref']}'
					,contrato_ano_ref = '{$this->values['contrato_ano_ref']}'
					,tipo_entrega_id = '{$this->values['tipo_entrega_id']}'
					,contrato_valor_ativacao = '{$this->values['contrato_valor_ativacao']}'
					,contrato_forma_pgto = '{$this->values['contrato_forma_pgto']}'
			WHERE	contrato_id = '{$this->values['contrato_id']}'
		";
		return $this->dbConn->db_execute(implode("\n",$sql));
	}
	protected function insertItem(){
		$result = array('success'=>true);
		if(count($this->values['contrato_item_seq']) > 0){
			foreach($this->values['contrato_item_seq'] AS $k=>$v){
				$valor = $this->limpaMoeda($this->values['contrato_item_valor'][$k]);
				$qtde = $this->limpaMoeda($this->values['contrato_item_qtde'][$k]);
				$sql = array();
				$sql[] = "
					INSERT INTO tb_contrato_item SET
						contrato_id = '{$this->values['contrato_id']}'
						,contrato_item_seq = '{$v}'
						,contrato_item_descr = '{$this->values['contrato_item_descr'][$k]}'
						,contrato_item_qtde = '{$qtde}'
						,contrato_item_valor = '{$valor}'
				";
				$result = $this->dbConn->db_execute(implode("\n",$sql));
				if(!$result['success']){
					return $result;
				}
			}
		}
		return $result;
	}
	protected function insertAnexo(){
		$result = array('success'=>true);
		if(count($this->values['contrato_tipo_anexo_id']) > 0){
			foreach($this->values['contrato_tipo_anexo_id'] AS $k=>$v){
				$sql = array();
				$sql[] = "
					INSERT INTO tb_contrato_anexo SET
						contrato_id = '{$this->values['contrato_id']}'
						,contrato_tipo_anexo_id = '{$v}'
				";
				$result = $this->dbConn->db_execute(implode("\n",$sql));
				if(!$result['success']){
					return $result;
				}
			}
		}
		return $result;
	}
	
	protected function update(){
		$result = $this->deleteAnexo();
		if(!$result['success']){
			return $result;
		}
		$result = $this->deleteItem();
		if(!$result['success']){
			return $result;
		}
		if(isset($this->values['nominal_id'])&&trim($this->values['nominal_id'])!=''){
			$result = $this->updateNominal();
		}else{
			$result = $this->insertNominal();
		}
		if(!$result['success']){
			return $result;
		}
		$result = $this->updateContrato();
		if(!$result['success']){
			return $result;
		}
		$result = $this->insertItem();
		if(!$result['success']){
			return $result;
		}
		$result = $this->insertAnexo();
		if(!$result['success']){
			return $result;
		}
		return $result;
	}
	protected function insert(){
		if(isset($this->values['nominal_id'])&&trim($this->values['nominal_id'])!=''){
			$result = $this->updateNominal();
		}else{
			$result = $this->insertNominal();
		}
		if(!$result['success']){
			return $result;
		}
		$result = $this->insertContrato();
		if(!$result['success']){
			return $result;
		}
		$result = $this->insertItem();
		if(!$result['success']){
			return $result;
		}
		$result = $this->insertAnexo();
		if(!$result['success']){
			return $result;
		}
		return $result;
	}
	public function edit(){
		$this->dbConn->db_start_transaction();
		if(isset($this->values['contrato_id'])&&trim($this->values['contrato_id'])!=''){
			$result = $this->update();
		}else{
			$result = $this->insert();
		}
		if(!$result['success']){
			$this->dbConn->db_rollback();
		}else{
			$this->dbConn->db_commit();
		}
		return $result;
	}
}

?>
